package com.itheima.dao;

import com.github.pagehelper.Page;
import com.itheima.pojo.CheckItem;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 检查项 持久层接口
 */
public interface CheckItemDao {

    /**
     * 添加检查项
     *
     * @param checkItem 检查项
     */
    @Insert("insert into t_checkitem values(null,#{code},#{name},#{sex},#{age},#{price},#{type},#{attention},#{remark})  ")
    void add(CheckItem checkItem);

    /**
     * 查询所有
     *
     * @return List<CheckItem> 检查项集合
     */
    @Select("select * from t_checkitem")
    List<CheckItem> findAll();

    /**
     * 根据条件查询
     *
     * @param queryString 查询条件
     * @return 检查项集合
     */
    @Select("<script>select * from t_checkitem <if test=\"queryString!=null and queryString!=''\">where code like \"%\"#{queryString}\"%\" or name like \"%\"#{queryString}\"%\"  </if></script>")
    Page<CheckItem> selectByCondition(@Param("queryString") String queryString);

    /**
     * 根据id删除
     *
     * @param id 检查项id
     */
    @Delete("delete from t_checkitem where id=#{id}")
    void delete(Integer id);

    /**
     * 根据检查项id查询被引用的数量
     *
     * @param checkItemId 检查项id
     * @return 检查组使用检查项的次数
     */
    @Select("select count(*) from t_checkgroup_checkitem where checkitem_id=#{checkItemId}")
    long findCountByCheckItemId(Integer checkItemId);

    /**
     * 更新
     *
     * @param checkItem 检查项
     */
    @Update("update t_checkitem set code=#{code},name=#{name},sex=#{sex},age=#{age},price=#{price},type=#{type},remark=#{remark},attention=#{attention} where id=#{id}")
    void edit(CheckItem checkItem);

    /**
     * 根据id查询
     *
     * @param id 检查项id
     * @return 检查项
     */
    @Select("select * from t_checkitem where id=#{id}")
    CheckItem findById(Integer id);

    /**
     * 根据检查组id查询关联的检查项
     *
     * @param checkGroupId 检查组id
     * @return List<CheckItem> 检查项集合
     */
    @Select("select * from t_checkitem where id in (select checkitem_id from t_checkgroup_checkitem where checkgroup_id=#{checkGroupId}) ")
    List<CheckItem> findCheckItemsByCheckGroupId(Integer checkGroupId);
}
